﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using projecto_asp.Models;
using System.Globalization;
using System.Diagnostics;

namespace projecto_asp.Controllers
{
    public class DocenteController : Controller
    {

        private bd1Entities db = new bd1Entities();

        //
        // GET: /Docente/

        public ActionResult Index(string ano = "", string mes = "")
        {

            ViewBag.coordenador_link = Session["coordenador"];

            /* código para o calendário */
            int mes_local = Int32.Parse(DateTime.Now.Month.ToString());
            if (mes != "")
            {
                mes_local = Int32.Parse(mes);
            }

            int ano_local = Int32.Parse(DateTime.Now.Year.ToString());
            if (ano != "")
            {
                ano_local = Int32.Parse(ano);
            }

            int mes_antes = mes_local - 1;
            int mes_depois = mes_local + 1;

            if (mes_depois == 13)
            {
                ViewBag.mes_antes = 11;
                ViewBag.mes_depois = 1;
                ViewBag.ano_antes = ano_local;
                ViewBag.ano_depois = ano_local + 1;
                ViewBag.nome_mes = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(mes_local) + "/" + ano_local;
            }
            else if (mes_antes == 0)
            {
                ViewBag.mes_antes = 12;
                ViewBag.mes_depois = 2;
                ViewBag.ano_antes = ano_local - 1;
                ViewBag.ano_depois = ano_local;
                ViewBag.nome_mes = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(mes_local) + "/" + ano_local;
            }
            else
            {
                ViewBag.ano_antes = ano_local;
                ViewBag.ano_depois = ano_local;
                ViewBag.mes_antes = mes_antes;
                ViewBag.mes_depois = mes_depois;
                ViewBag.nome_mes = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(mes_local) + "/" + ano_local;
            }

            disciplina modelDisciplina = new disciplina();
            calendarModel modelCalendario = new calendarModel();
            docenteDisciplina modelProfessorDisciplina = new docenteDisciplina();

            modelCalendario.ano = ano_local;
            modelCalendario.mes = mes_local;

            int cod_professor = Int32.Parse(RouteData.Values["Id"].ToString());
            ViewBag.cod_docente = cod_professor;

            var ano_letivo = modelCalendario.getAnoLetivoAtual();
            ViewBag.ano_letivo = ano_letivo;
            ViewBag.lista_dias = modelCalendario.dadosPreenchimentoCalendario(cod_professor, true);

            modelProfessorDisciplina.id_docente = cod_professor;
            Dictionary<string, Dictionary<string, List<disciplina>>> lista_lecciona = modelProfessorDisciplina.getDisciplinaLeccionada(ano_letivo);

            ViewBag.lista_disciplinas_leccionadas = lista_lecciona;

            /*-------*/
            ViewBag.log_out = true;
            ViewBag.coordenador = false;
            ViewBag.hora = DateTime.Now.ToString("dd-MMMM-yyyy HH:mm");
            /*-------*/

            return View();
        }

        public ActionResult verInscritos(int cod_disciplina)
        {
            /*-------*/
            ViewBag.log_out = true;
            ViewBag.coordenador = false;
            ViewBag.hora = DateTime.Now.ToString("dd-MMMM-yyyy HH:mm");

            int cod_professor = Int32.Parse(RouteData.Values["Id"].ToString());
            ViewBag.cod_docente = cod_professor;
            ViewBag.cod_disciplina = cod_disciplina;
            /*-------*/

            int mes_local = Int32.Parse(DateTime.Now.Month.ToString());
            int ano_local = Int32.Parse(DateTime.Now.Year.ToString());
            calendarModel modelCalendario = new calendarModel();

            modelCalendario.ano = ano_local;
            modelCalendario.mes = mes_local;

            var ano_letivo = modelCalendario.getAnoLetivoAtual();
            ViewBag.ano_letivo = ano_letivo;

            docenteDisciplina modelProfessorDisciplina = new docenteDisciplina();
            modelProfessorDisciplina.id_docente = cod_professor;
            Dictionary<string, Dictionary<string, List<disciplina>>> lista_lecciona = modelProfessorDisciplina.getDisciplinaLeccionada(ano_letivo);

            ViewBag.lista_disciplinas_leccionadas = lista_lecciona;

            momentoAvaliacao modelMomentoAvaliacao = new momentoAvaliacao();
            var listaMomentosAvaliacao = modelMomentoAvaliacao.getAvaliacoesDisciplina(cod_disciplina);

            if (listaMomentosAvaliacao.Count() > 0)
            {
                ViewBag.momentos_aval = listaMomentosAvaliacao;
            }
            else
            {
                ViewBag.momentos_aval = null;
            }

            return View();
        }

        public ActionResult verInscritosMomento(int cod_disciplina, int id_momento)
        {
            /*-------*/
            ViewBag.log_out = true;
            ViewBag.coordenador = false;
            ViewBag.hora = DateTime.Now.ToString("dd-MMMM-yyyy HH:mm");

            int cod_professor = Int32.Parse(RouteData.Values["Id"].ToString());
            ViewBag.cod_docente = cod_professor;
            ViewBag.cod_disciplina = cod_disciplina;
            /*-------*/

            int mes_local = Int32.Parse(DateTime.Now.Month.ToString());
            int ano_local = Int32.Parse(DateTime.Now.Year.ToString());
            calendarModel modelCalendario = new calendarModel();

            modelCalendario.ano = ano_local;
            modelCalendario.mes = mes_local;

            var ano_letivo = modelCalendario.getAnoLetivoAtual();
            ViewBag.ano_letivo = ano_letivo;

            docenteDisciplina modelProfessorDisciplina = new docenteDisciplina();
            modelProfessorDisciplina.id_docente = cod_professor;
            Dictionary<string, Dictionary<string, List<disciplina>>> lista_lecciona = modelProfessorDisciplina.getDisciplinaLeccionada(ano_letivo);

            ViewBag.lista_disciplinas_leccionadas = lista_lecciona;

            inscricaoMomentoAvaliacao modelInscricaoMomentoAvaliacao = new inscricaoMomentoAvaliacao();
            var listaInscritos = modelInscricaoMomentoAvaliacao.getListaInscritos(id_momento);

            if (listaInscritos.Count() > 0)
            {
                ViewBag.lista_inscritos = listaInscritos;
            }
            else
            {
                ViewBag.lista_inscritos = null;
            }
            return View();
        }

        public ActionResult marcarAvaliacao(int cod_disciplina)
        {
            disciplina modelDisciplina = new disciplina();
            calendarModel modelCalendario = new calendarModel();
            docenteDisciplina modelDocenteDisciplina = new docenteDisciplina();
            momentoAvaliacao modelMomentoAvaliacao = new momentoAvaliacao();

            int ano_local = Int32.Parse(DateTime.Now.Year.ToString());
            int mes_local = Int32.Parse(DateTime.Now.Month.ToString());

            modelCalendario.ano = ano_local;
            modelCalendario.mes = mes_local;

            int cod_professor = Int32.Parse(RouteData.Values["Id"].ToString());
            modelDocenteDisciplina.id_docente = cod_professor;

            var ano_letivo = modelCalendario.getAnoLetivoAtual();
            ViewBag.ano_letivo = ano_letivo;
            ViewBag.lista_dias = modelCalendario.dadosPreenchimentoCalendario(cod_professor, true);

            Dictionary<string, Dictionary<string, List<disciplina>>> lista_lecciona = modelDocenteDisciplina.getDisciplinaLeccionada(ano_letivo);
            ViewBag.lista_disciplinas_leccionadas = lista_lecciona;

            /*-------*/
            ViewBag.log_out = true;
            ViewBag.coordenador = false;
            ViewBag.hora = DateTime.Now.ToString("dd-MMMM-yyyy HH:mm");

            ViewBag.cod_tipo_avaliacao = new SelectList(db.tipoAvaliacaos, "cod_tipo_avaliacao", "descricao");
            ViewBag.id_tipo_avaliacao = new SelectList(db.tipoAvaliacaos, "id_tipo_avaliacao", "descricao");
            /*-------*/

            modelDisciplina.id_disciplina = cod_disciplina;

            /*-------*/
            ViewBag.cod_docente = cod_professor;
            ViewBag.modeloDisciplina = modelDisciplina;
            int cod_aval = modelMomentoAvaliacao.getUltimaAvaliacao();
            ViewBag.cod_avaliacao = cod_aval;
            /*-------*/

            return View(modelMomentoAvaliacao);
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult marcarAvaliacao(momentoAvaliacao momento_avaliacao)
        {

            /* Valores a passar para a interface de confirmação */
            if (ModelState.IsValid)
            {
                Session["momento_aval"] = momento_avaliacao;

                return RedirectToAction("confirmarMarcarAvaliacao");
            }
            else
            {
                disciplina modelDisciplina = new disciplina();
                calendarModel modelCalendario = new calendarModel();
                docenteDisciplina modelDocenteDisciplina = new docenteDisciplina();
                momentoAvaliacao modelMomentoAvaliacao = new momentoAvaliacao();

                int ano_local = Int32.Parse(DateTime.Now.Year.ToString());
                int mes_local = Int32.Parse(DateTime.Now.Month.ToString());

                modelCalendario.ano = ano_local;
                modelCalendario.mes = mes_local;

                int cod_professor = Int32.Parse(RouteData.Values["Id"].ToString());
                modelDocenteDisciplina.id_docente = cod_professor;

                var ano_letivo = modelCalendario.getAnoLetivoAtual();
                ViewBag.ano_letivo = ano_letivo;
                ViewBag.lista_dias = modelCalendario.dadosPreenchimentoCalendario(cod_professor, true);

                Dictionary<string, Dictionary<string, List<disciplina>>> lista_lecciona = modelDocenteDisciplina.getDisciplinaLeccionada(ano_letivo);
                ViewBag.lista_disciplinas_leccionadas = lista_lecciona;

                /*-------*/
                ViewBag.log_out = true;
                ViewBag.coordenador = false;
                ViewBag.hora = DateTime.Now.ToString("dd-MMMM-yyyy HH:mm");

                ViewBag.cod_tipo_avaliacao = new SelectList(db.tipoAvaliacaos, "cod_tipo_avaliacao", "descricao");
                ViewBag.id_tipo_avaliacao = new SelectList(db.tipoAvaliacaos, "id_tipo_avaliacao", "descricao");
                /*-------*/

                int cod_disciplina_local = momento_avaliacao.id_disciplina;
                modelDisciplina.id_disciplina = cod_disciplina_local;

                /*-------*/
                ViewBag.cod_docente = cod_professor;
                ViewBag.modeloDisciplina = modelDisciplina;
                int cod_aval = modelMomentoAvaliacao.getUltimaAvaliacao();
                ViewBag.cod_avaliacao = cod_aval;

                /*-------*/

                return View(momento_avaliacao);
            }
        }

        public ActionResult confirmarMarcarAvaliacao()
        {

            disciplina modelDisciplina = new disciplina();
            calendarModel modelCalendario = new calendarModel();
            docenteDisciplina modelDocenteDisciplina = new docenteDisciplina();
            tipoAvaliacao modelTipoAvaliacao = new tipoAvaliacao();
            momentoAvaliacao momento_avaliacao = (momentoAvaliacao)Session["momento_aval"];

            int ano_local = Int32.Parse(DateTime.Now.Year.ToString());
            int mes_local = Int32.Parse(DateTime.Now.Month.ToString());

            modelCalendario.ano = ano_local;
            modelCalendario.mes = mes_local;

            int cod_professor = momento_avaliacao.id_docente;
            modelDocenteDisciplina.id_docente = cod_professor;

            var ano_letivo = modelCalendario.getAnoLetivoAtual();
            ViewBag.ano_letivo = ano_letivo;
            ViewBag.lista_dias = modelCalendario.dadosPreenchimentoCalendario(cod_professor, true);

            Dictionary<string, Dictionary<string, List<disciplina>>> lista_lecciona = modelDocenteDisciplina.getDisciplinaLeccionada(ano_letivo);
            ViewBag.lista_disciplinas_leccionadas = lista_lecciona;

            ViewBag.log_out = true;
            ViewBag.coordenador = false;
            ViewBag.hora = DateTime.Now.ToString("dd-MMMM-yyyy HH:mm");

            ViewBag.cod_tipo_avaliacao = new SelectList(db.tipoAvaliacaos, "cod_tipo_avaliacao", "descricao");
            ViewBag.id_tipo_avaliacao = new SelectList(db.tipoAvaliacaos, "id_tipo_avaliacao", "descricao");

            int cod_disciplina_local = momento_avaliacao.id_disciplina;
            modelDisciplina.id_disciplina = cod_disciplina_local;

            ViewBag.cod_docente = cod_professor;
            ViewBag.modeloDisciplina = modelDisciplina;
            int cod_aval = momento_avaliacao.id_momento_avaliacao;
            ViewBag.cod_avaliacao = cod_aval;

            /*dados da avaliação*/
            string sala = momento_avaliacao.sala;

            if (sala != null)
            {
                ViewData["sala_aval"] = sala; 
            }
            else
            {
                ViewData["sala_aval"] = "N/D";
            }
            ViewData["tipo_aval"] = modelTipoAvaliacao.getDescricao(momento_avaliacao.id_tipo_avaliacao);
            /*Fim dados da avaliação*/

            return View();
        }

        public ActionResult guardarAval()
        {
            momentoAvaliacao momento = (momentoAvaliacao)Session["momento_aval"];

            disciplina modelDisciplina = new disciplina();
            calendarModel modelCalendario = new calendarModel();
            docenteDisciplina modelDocenteDisciplina = new docenteDisciplina();
            tipoAvaliacao modelTipoAvaliacao = new tipoAvaliacao();

            int ano_local = Int32.Parse(DateTime.Now.Year.ToString());
            int mes_local = Int32.Parse(DateTime.Now.Month.ToString());

            modelCalendario.ano = ano_local;
            modelCalendario.mes = mes_local;

            int cod_professor = momento.id_docente;
            modelDocenteDisciplina.id_docente = cod_professor;

            var ano_letivo = modelCalendario.getAnoLetivoAtual();
            ViewBag.ano_letivo = ano_letivo;
            ViewBag.lista_dias = modelCalendario.dadosPreenchimentoCalendario(cod_professor, true);

            Dictionary<string, Dictionary<string, List<disciplina>>> lista_lecciona = modelDocenteDisciplina.getDisciplinaLeccionada(ano_letivo);
            ViewBag.lista_disciplinas_leccionadas = lista_lecciona;

            ViewBag.log_out = true;
            ViewBag.coordenador = false;
            ViewBag.hora = DateTime.Now.ToString("dd-MMMM-yyyy HH:mm");

            ViewBag.cod_tipo_avaliacao = new SelectList(db.tipoAvaliacaos, "cod_tipo_avaliacao", "descricao");
            ViewBag.id_tipo_avaliacao = new SelectList(db.tipoAvaliacaos, "id_tipo_avaliacao", "descricao");

            int cod_disciplina_local = momento.id_disciplina;
            modelDisciplina.id_disciplina = cod_disciplina_local;

            ViewBag.cod_docente = cod_professor;
            ViewBag.modeloDisciplina = modelDisciplina;
            int cod_aval = momento.id_momento_avaliacao;
            ViewBag.cod_avaliacao = cod_aval;

            db.momentoAvaliacaos.AddObject(momento);
            db.SaveChanges();

            return View();
        }
    }

}
